package net.xdclass.util;

import cn.hutool.core.io.FileUtil;
import net.xdclass.enums.BizCodeEnum;
import net.xdclass.exception.BizException;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;

/**
 * 生成保存文件的文件名
 */
public class CustomFileUtil {

    /**
     * 生成文件名称
     * Timestamp + '-' + UUID + '-' + 原文件名
     * @param filename
     * @return
     */
    public static String getFilename(String filename) {
        return System.currentTimeMillis() + "-" +
                (UUID.randomUUID().toString().replaceAll("-", "")) + "-" +
                filename;
    }


    /**
     * 读取远程文件内容
     *
     * @param urlStr 远程文件的URL字符串
     * @return 远程文件的内容
     * @throws BizException 当读取远程文件失败时抛出业务异常
     */
    public static String readRemoteFile(String urlStr) {
        try {
            // 创建URL对象，打开到指定URL的连接
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();

            // 创建缓冲读取流，用于读取URL连接的输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            // 使用StringBuilder存储读取的文件内容
            StringBuilder content = new StringBuilder();

            // 逐行读取文件内容，并追加到StringBuilder中
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line);
                content.append(System.lineSeparator());
            }

            // 关闭读取流
            reader.close();

            // 返回读取到的文件内容
            return content.toString();
        } catch (Exception e) {
            // 当发生异常时，抛出业务异常，表示远程文件读取失败
            throw new BizException(BizCodeEnum.FILE_REMOTE_READ_FAILED, e);
        }
    }

    /**
     * 根据路径创建指定文件夹
     * @param dir
     */
    public static void mkdir(String dir) {
        FileUtil.mkdir(dir);
    }

    /**
     * 获取文件的后缀
     * @param remoteFilePath
     * @return
     */
    public static String getSuffix(String remoteFilePath) {
        if (remoteFilePath.contains(".")) {
            return remoteFilePath.substring(remoteFilePath.lastIndexOf("."));
        }
        return null;
    }
}
